/**
 * @description axios 网络请求封装
 * @author suo.tianbao@vpclub.cn
 */

import axios from 'axios'
import {Message, MessageBox} from 'element-ui'

let querystring = require('querystring')
axios.defaults.baseURL = "http://172.17.0.9:9006/"
// axios.defaults.baseURL = "http://175.24.116.12:9006/"
// axios.defaults.baseURL = "http://ihuoyuapi.vpclub.cn/"
axios.defaults.timeout = 180000 // 超时时长
axios.defaults.withCredentials = false // 携带cookie

axios.interceptors.request.use(config => {
    // 这里加入一个文件上传的json头判断，不然上传文件会导致所有的请求头错误
    if (config.url.indexOf("/file/") > 0) {
        config.headers = {'Content-Type': 'multipart/form-data'}
    } else {
        config.headers = {'Content-Type': 'application/json;charset=UTF-8'}
    }
    return config
}, err => {
    return Promise.reject(err)
})

// respone拦截器
axios.interceptors.response.use(response => {
    /**
     * code为非200是抛错 可结合自己业务进行修改
     */
    const res = response.data
    if (res.code == 200) {
        return res;
    } else {
        // 401:未登录;
        if (res.code === 401 || res.code === 403) {
            MessageBox.confirm('你已被登出，可以取消继续留在该页面，或者重新登录', '确定登出', {
                confirmButtonText: '重新登录',
                cancelButtonText: '取消',
                type: 'warning'
            }).then(() => {
            })
        } else {
            // Message({message: res.message, type: 'error', duration: 3 * 1000})
        }
        return Promise.reject(res.message)
    }
}, error => {
    Message({message: error.message, type: 'error', duration: 3 * 1000})
    return Promise.reject(error)
})

let timeout = 50000

/**
 * get请求
 * @param {string} url 请求url
 * @param {Object} data 请求参数
 */
export async function get(url, data = {}) {
    return await axios.get(url, {params: data}, {timeout: timeout})
}

/**
 * get请求
 * @param {string} url 请求url
 * @param {Object} data 请求参数
 */
export async function put(url, data = {},) {
    return await axios.put(url, data, {
        timeout: timeout,
        headers: {
            'Content-Type': 'application/json'
        }
    })
}

/**
 * post请求
 * @param {string} url 请求url
 * @param {Object} data 请求参数
 */
export async function post(url, data = {}) {
    return await axios.post(url, querystring.stringify(data), {timeout: timeout})
}

/**
 * delete请求
 * @param {string} url 请求url
 * @param {Object} data 请求参数
 */
export async function del(url) {
    return await axios.delete(url, {timeout: timeout})
}

/**
 * post请求
 * @param {string} url 请求url
 * @param {Object} data 请求参数
 */
export async function postWithJson(url, data = {}) {
    const options = {
        method: "POST",
        headers: {"content-type": "application/json", timeout: timeout},
        data: data,
        url
    }
    return await axios(options);
}

/**
 * post form参数请求
 *
 * @param {string} url 请求 url
 * @param {Object} data 发送的数据
 * @return {Promise}
 */
export async function form(url, data = {}) {
    return await axios.post(url,
        querystring.stringify(data),
        {
            headers: {
                "Content-Type": "application/x-www-form-urlencoded"
            }
        }
    )
}